package com.coder.rental.utils;

import lombok.Data;
import lombok.experimental.Accessors;

@Data
@Accessors(chain = true)
public class Result<T> {
    private Integer code;
    private String message;
    private Boolean success;
    private T data;

    private Result() {}

    /**
     * 创建一个表示操作成功的Result对象
     *
     * @param <T> 泛型类型，表示返回数据的类型
     * @return Result<T> 成功结果对象，包含成功状态、成功码和成功消息
     */
    public static <T> Result<T> success(){
        return new Result<T>().setSuccess(true).setCode(ResultCode.SUCCESS).setMessage("操作成功");
    }

    /**
     * 创建一个表示操作成功的Result对象，并设置返回数据
     *
     * @param <T> 泛型类型，表示返回数据的类型
     * @param data 要返回的数据对象
     * @return Result<T> 成功结果对象，包含成功状态、成功码、成功消息和数据
     */
    public static <T> Result<T> success(T data) {
        return new Result<T>().setSuccess(true).setCode(ResultCode.SUCCESS).setMessage("操作成功").setData(data);
    }
    /**
     * 创建一个表示操作失败的Result对象
     *
     * @param <T> 泛型类型，表示返回数据的类型
     * @return Result<T> 失败结果对象，包含失败状态、错误码和失败消息
     */
    public static <T> Result<T> fail(){
        return new Result<T>().setSuccess(false).setCode(ResultCode.ERROR).setMessage("操作失败");
    }
}
